package com.zch.client.spring.mqtt.condition;

import com.zch.client.spring.mqtt.callback.MqttClientRootCallback;
import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
import org.springframework.util.ClassUtils;

import java.util.Map;

/**
 * SpringBootCondition 是springboot 的 他实现了Spring 的Condition 接口
 */
public class MqttClientPresentCondition extends SpringBootCondition {
    @Override
    public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) {
        // 检查 Spring 容器中是否存在 MqttClientRootCallback 类型的 Bean
        //context.getBeanFactory().containsBeanDefinition("mqttClientRootCallback") 是指定bean 名称来检测，但我们需要根据bean 类型来检测
        Map<String,MqttClientRootCallback> beans = context.getBeanFactory().getBeansOfType(MqttClientRootCallback.class);
        if(beans.isEmpty()){
           /* return ConditionOutcome.noMatch(
                    "未找到 MqttClientRootCallback 类型的 Bean，无法创建 fastMqttClient Bean。原因：可能是缺少相关依赖或配置。"
            );*/
            //抛出明确异常 阻断应用启动！！！
            throw new IllegalStateException(
                    "未找到 MqttClientRootCallback 类型的 Bean，无法创建 fastMqttClient Bean。原因：可能是缺少相关依赖或配置。"
            );
        }
        return ConditionOutcome.match("MqttClientRootCallback 类型的 Bean 存在");
    }

}
